import sys
# sys.path.append('/home/chenkai/insurance_sales_gpt/fine_tune')
sys.path.append('../../../')
import pandas as pd
import numpy as np
from agent.llm_agent import LLMAgent
from langchain import FAISS, OpenAI
import asyncio
import openai
import json
import time
# format={"messages": [{"role": "system", "content": "You are a happy assistant that puts a positive spin on everything."}, {"role": "user", "content": "I fell off my bike today."}, {"role": "assistant", "content": "It's great that you're getting exercise outdoors!"}]}

from gpt35_functions import *


import os
os.environ['OPENAI_API_KEY'] = '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' # fill me in



def get_prompt(dialogue):
    system_content='''你是一名专业的保险方面信息提取专家,你的任务是从坐席和用户电话沟通的对话记录里敏锐的捕捉用户表现出来的沟通意愿、购买意愿以及保险意识方面的相关信息。对话的场景是坐席打电话通知用户领取一份免费赠送的保险，如果用户同意领取赠险，坐席会给用户销售一份升级版的百万医疗保险,坐席的最终目的是引导用户使用微信或者支付宝进行升级版保险的购买;对话一般是坐席询问、用户回答的形式,坐席偶尔会再重复跟用户澄清确认;对话记录是语音识别的结果，有些信息的提取需要根据上下文进行推理,如果坐席后续有使用和用户回答不一致的信息,则以坐席为准;你需要从对话记录中提取或推理的用户下列相关信息：
--------------------------
是否本人接听
是否询问打电话目的
是否询问投保条件
是否询问保费问题
是否询问与现有保险是否冲突的问题
是否询问保障范围及保障时效问题
是否询问缴费理赔售后问题
是否询问平台身份等问题
是否询问为其他人投保
是否预约回访
是否表示在忙
是否感觉操作麻烦
是否表示稍后操作
是否表示不会操作
是否表示不需要
--------------------------
对于每一项信息返回结果只能是[是、否、不确定]其中之一，每一类结果判断说明:是：对话中用户表现出了该项信息;否：对话中用户没有表现出该项信息;不确定：无法判断用户表现出了什么信息。结果输出格式为json，只需要返回json内容。'''
    dialogues=split_content(dialogue)
    user_contents=['''对话记录:
--------------------------
{}
--------------------------'''.format(dialogue) for dialogue in dialogues]
    print([token_count(dialogue) for dialogue in dialogues])
    return system_content,user_contents

def write_to_file(session_id,dialogue,result):
    query=[{'session_id':session_id,
            'dialogue':dialogue,
            'result':result}]
    pd.DataFrame(query).to_csv("result_new1013.csv",mode='a',index=False,header=False)


if __name__=='__main__':
    df=pd.read_excel("asr_text.xlsx")
    print(df.shape)
    openai.api_key='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'
    for _,data in df.iterrows():
        system_content,user_contents=get_prompt(data['asr_text'])
        for user_content in user_contents:
            chat = LLMAgent(user_content)
            chat.gpt_prompt = [
                {"role": "system", "content": "{}".format(system_content)},
                {"role": "user", "content": "{}".format(user_content)},
            ]
            result = asyncio.run(chat.async_chat_with_openai())
            # result = json.dumps(result,ensure_ascii=False)
            write_to_file(data['session_id'],user_content,result)
            print(result)
            print('sleep 40s')
            time.sleep(40)
